home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / rheap.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.4 KB  |  90 lines

  1. /*
  2.  * include/asm-ppc/rheap.h
  3.  *
  4.  * Header file for the implementation of a remote heap.
  5.  *
  6.  * Author: Pantelis Antoniou <panto@intracom.gr>
  7.  *
  8.  * 2004 (c) INTRACOM S.A. Greece. This file is licensed under
  9.  * the terms of the GNU General Public License version 2. This program
  10.  * is licensed "as is" without any warranty of any kind, whether express
  11.  * or implied.
  12.  */
  13.  
  14. #ifndef __ASM_PPC_RHEAP_H__
  15. #define __ASM_PPC_RHEAP_H__
  16.  
  17. #include <linux/list.h>
  18.  
  19. typedef struct _rh_block {
  20.     struct list_head list;
  21.     unsigned long start;
  22.     int size;
  23.     const char *owner;
  24. } rh_block_t;
  25.  
  26. typedef struct _rh_info {
  27.     unsigned int alignment;
  28.     int max_blocks;
  29.     int empty_slots;
  30.     rh_block_t *block;
  31.     struct list_head empty_list;
  32.     struct list_head free_list;
  33.     struct list_head taken_list;
  34.     unsigned int flags;
  35. } rh_info_t;
  36.  
  37. #define RHIF_STATIC_INFO    0x1
  38. #define RHIF_STATIC_BLOCK    0x2
  39.  
  40. typedef struct _rh_stats {
  41.     unsigned long start;
  42.     int size;
  43.     const char *owner;
  44. } rh_stats_t;
  45.  
  46. #define RHGS_FREE    0
  47. #define RHGS_TAKEN    1
  48.  
  49. /* Create a remote heap dynamically */
  50. extern rh_info_t *rh_create(unsigned int alignment);
  51.  
  52. /* Destroy a remote heap, created by rh_create() */
  53. extern void rh_destroy(rh_info_t * info);
  54.  
  55. /* Initialize in place a remote info block */
  56. extern void rh_init(rh_info_t * info, unsigned int alignment, int max_blocks,
  57.             rh_block_t * block);
  58.  
  59. /* Attach a free region to manage */
  60. extern int rh_attach_region(rh_info_t * info, unsigned long start, int size);
  61.  
  62. /* Detach a free region */
  63. extern unsigned long rh_detach_region(rh_info_t * info, unsigned long start, int size);
  64.  
  65. /* Allocate the given size from the remote heap (with alignment) */
  66. extern unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment,
  67.         const char *owner);
  68.  
  69. /* Allocate the given size from the remote heap */
  70. extern unsigned long rh_alloc(rh_info_t * info, int size, const char *owner);
  71.  
  72. /* Allocate the given size from the given address */
  73. extern unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size,
  74.                 const char *owner);
  75.  
  76. /* Free the allocated area */
  77. extern int rh_free(rh_info_t * info, unsigned long start);
  78.  
  79. /* Get stats for debugging purposes */
  80. extern int rh_get_stats(rh_info_t * info, int what, int max_stats,
  81.             rh_stats_t * stats);
  82.  
  83. /* Simple dump of remote heap info */
  84. extern void rh_dump(rh_info_t * info);
  85.  
  86. /* Set owner of taken block */
  87. extern int rh_set_owner(rh_info_t * info, unsigned long start, const char *owner);
  88.  
  89. #endif                /* __ASM_PPC_RHEAP_H__ */
  90.